/**
 * org.assess.core.action.BaseAction
 */
package org.assess.core.action;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.json.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @description Action操作的基类
 * @author XiaLongxiang
 * @createtime 2011-8-27 上午12:52:06
 */
public abstract class BaseAction extends ActionSupport {
    /** 序列化号 */
    private static final long serialVersionUID = 3700183885271022186L;
    
    /** 当前页数 */
    private int page = 0;
    
    /** 每页显示行数 */
    private int rows = 0;
    
    /** 是否编辑/修改，true为是编辑修改，false为否 */
    private boolean edit;
    
    /** ID号 */
    private String id;
    
    /** 需要传递到页面的消息 */
    private String message;
    
    /** JSON格式的数据 */
    private String jsonString;
    
    /** Action执行成功后的跳转页面 */
    private String successResult;
    
    /** 默认构造方法 */
    public BaseAction() {
        edit = false;
        successResult = "/json.html";
    }
    
    /**
     * 输出文件
     * @param strContent - 文件内容
     * @param fileName - 文件名
     * @throws Exception
     */
    public final void outToFile(String content, String fileName) throws Exception {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.reset();
        response.setContentType("application/octet-stream");
        response.setHeader("Content-disposition", "attachment; filename=" + fileName);// 设定输出文件头
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.print(content);
        out.flush();
        out.close();
        response.flushBuffer();
    }
    
    /**
     * 根据输入的key获取指定的session数据
     * @param strKey
     * @return
     */
    public final Object getSession(String key) {
        HttpSession session = ServletActionContext.getRequest().getSession();
        Object object = session.getAttribute(key);
        return object;
    }
    
    /**
     * 根据指定的key和value，设置数据到session中
     * @param strKey
     * @return Object
     */
    public final void putSession(String key, Object value) {
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.setAttribute(key, value);
    }
    
    /**
     * 获取ID号
     * @return
     */
    @JSON(serialize=false)
    public String getId() {
        return this.id;
    }
    
    /**
     * 设置ID号
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }
    
    /**
     * 获取当前页数
     * @return
     */
    public int getPage() {
        return page;
    }
    
    /**
     * 设置当前页数
     * @param page
     */
    public void setPage(int page) {
        this.page = page;
    }
    
    /**
     * 获取每页显示行数
     * @return
     */
    public int getRows() {
        return rows;
    }
    
    /**
     * 设置每页显示行数
     * @param rows
     */
    public void setRows(int rows) {
        this.rows = rows;
    }
    
    /**
     * 判断是否编辑/修改
     * @return
     */
    public boolean isEdit() {
        return edit;
    }
    
    /**
     * 设置是否编辑/修改
     * @param edit
     */
    public void setEdit(boolean edit) {
        this.edit = edit;
    }
    
    /**
     * 获取需要传递到页面的消息
     * @return
     */
    public String getMessage() {
        return message;
    }
    
    /**
     * 设置需要传递到页面的消息
     * @param message
     */
    public void setMessage(String message) {
        this.message = message;
    }
    
    /**
     * 获取JSON格式的数据
     * @return
     */
    public String getJsonString() {
        return jsonString;
    }
    
    /**
     * 设置JSON格式的数据
     * @param jsonString
     */
    public void setJsonString(String jsonString) {
        this.jsonString = jsonString;
    }
    
    /**
     * 获取Action执行成功后的跳转页面
     * @return
     */
    public String getSuccessResult() {
        return successResult;
    }
    
    /**
     * 设置Action执行成功后的跳转页面
     * @param successResult
     */
    public void setSuccessResult(String successResult) {
        this.successResult = successResult;
    }
}
